﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AutomatasPrj
{
    class AFNDEpsilon : AFND
    {
        public AFNDEpsilon(Estado inicial,
                    Estado[] estados,
                    DeltaAFND delta,
                    Estado[] finales) : base(inicial, estados, delta, finales)
        {
        }

        public override HashSet<Estado> deltaGorro(Estado estado, String palabra)
        {
            return delta.ClausuraEpsilon( base.deltaGorro(estado, palabra) );
        }

        public override bool Accepts(String palabra)
        {
            HashSet<Estado> ejecuciones = deltaGorro(inicial, palabra);

            // Si ejecuciones contiene al menos un estado final
            return (ejecuciones.Intersect(finales).Count() != 0);
        }
    }
}
